/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package clases_test;


import clases.Producto;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.FlushModeType;
import javax.persistence.Persistence;
import javax.persistence.PersistenceException;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

/**
 *
 * @author Miguel_
 */
public class testProducto {
    
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("recetasUnit");
    EntityManager em;
    Producto pr1;
    Producto pr2;
    Producto pr3;
    
    public testProducto(){}
    
    @BeforeClass
    public static void setUpClass() throws Exception {
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
    }

    @Before
    public void setUp() {
        em = emf.createEntityManager();
        em.setFlushMode(FlushModeType.AUTO);
     
        pr1 = createProducto("Solomillo cerdo");
        pr2 = createProducto("Espinacas");
        pr3 = createProducto("Tallarines");
    }

    @After
    public void tearDown() {
        em.close();
    }
    
    private Producto createProducto(String n){
        Producto p = new Producto();
        p.setNombre(n);
        return p;
    }
    
    
    @Test
    public void persistProducto() {
        em.getTransaction().begin();
        
        // Insertamos los distintos objetos Tipo
        em.persist(pr1);
        em.persist(pr2);
        em.persist(pr3);
        
        assertEquals("Tipo "+pr1.getNombre()+" (ID "+pr1.getId()+") insertado!.", pr1.getId(),1);
        assertEquals("Tipo "+pr2.getNombre()+" (ID "+pr2.getId()+") insertado!.", pr2.getId(),2);
        assertEquals("Tipo "+pr3.getNombre()+" (ID "+pr3.getId()+") insertado!.", pr3.getId(),3);
        
        assertEquals("Receta "+pr1.getNombre()+" (ID "+pr1.getId()+") inserted!.",
                pr1.getId(), 1);
        
        em.getTransaction().commit();
     
    } 
    
    @Test
    public void persistProducto2() {
        try{
            em.getTransaction().begin();
            // Insertamos los distintos objetos Status
            em.persist(pr1);
            em.persist(pr2);
            em.persist(pr3);
            
   //         assertEquals("Receta "+pr1.getNombre()+" (ID "+pr1.getId()+") inserted!.",
   //             pr1.getId(), 1);
            
            em.getTransaction().commit();
      //      fail("Insertados Tipo duplicados.");
        }catch(Exception ex){
            assertEquals("No inserta status duplicados?", pr1.getId()!=null,ex instanceof PersistenceException );
            assertEquals("No inserta status duplicados?", pr2.getId()!=null,ex instanceof PersistenceException );
            assertEquals("No inserta status duplicados?", pr3.getId()!=null,ex instanceof PersistenceException );
        }
    }
    
    
}
